package Class_test1;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class MyReflect {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        //获取class字节码对象
        Class clazz=Class.forName("Class_test1.Student");
//        //获取构造方法
//        Constructor[] cons1=clazz.getConstructors();
//        for (Constructor constructor : cons1) {
//            System.out.println(constructor);
//        }
//        //获取所有的构造方法(包括私有方法)
//        Constructor[] cons2=clazz.getDeclaredConstructors();
//        for (Constructor constructor : cons2) {
//            System.out.println(constructor);
//        }
//        //获取公有无参构造方法
//        Constructor con1=clazz.getDeclaredConstructor();
//        System.out.println(con1);
//        //获取私有有参构造方法
//        Constructor con2=clazz.getDeclaredConstructor(String.class,int.class);
//        System.out.println(con2);
//        //获取私有有参构造方法 一个参数
//        Constructor con3=clazz.getDeclaredConstructor(String.class);
//        System.out.println(con3);

        Constructor con4= clazz.getDeclaredConstructor(String.class,int.class);
        //获取权限修饰符
//        int modifiers=con4.getModifiers();
//        System.out.println(modifiers);
//        //参数
//        Parameter[] p=con4.getParameters();
//        for (Parameter parameter : p) {
//            System.out.println(parameter);
 //       }
        //创建对象 暴力反射
        con4.setAccessible(true);
        //创建对象 强转
        Student stu=(Student) con4.newInstance("张三",18);
        System.out.println(stu);
    }
}
